package com.cskaoyan._06operate._03reverse;

import java.util.Arrays;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/1 16:39
 **/
/*
数组逆序
[1,2,3,4,5] ---> [5,4,3,2,1]


 */
public class Demo {
    public static void main(String[] args) {
        // 定义一个数组
        int[] arr = {1, 2, 3, 4, 5};
        // 测试
        int[] newArray = reverse(arr);
        System.out.println(Arrays.toString(newArray));

        System.out.println("---------");

        int[] newArray2 = reverse2(arr);
        System.out.println(Arrays.toString(newArray2));
    }

    // 使用二分法进行数组逆序
    /*
    分析:
        参数:数组
        返回值:数组
     */
    public static int[] reverse(int[] arr) {
        // 数组遍历
        for (int i = 0; i < arr.length / 2; i++) {
            // 数据进行交互 0 <----> length -1
            //            1 <----> lengeh - 2
            //            .....
            // 交换的时候需要一个临时变量进行保存临时数据
            int temp;
            temp = arr[i];
            arr[i] = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = temp;
        }

        // 循环结束,交换完成
        // 返回交换之后的数组
        return arr;
    }

    /*
    使用2个标记进行逆序
     分析:
        参数:数组
        返回值:数组
     */
    public static int[] reverse2(int[] arr) {
        // 遍历数组
        // 定义2个变量,start,end
        // start=0, end=length-1
        // 每循环1次,start++ ,  end--
        for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
            // start < end
            // 循环内部进行swap  start指向的元素 跟 end指向的元素进行交换
            // 定义临时变量存储临时值
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }

        // 循环结束, 完成交互
        // 返回交换后的数组
        return arr;
    }
}
